﻿<?xml version="1.0" encoding="UTF-8" ?>
<!--
///////////////////////////////////////////////////////////////////////////
/// File: <FileName>
/// Description: 
///    - 本文件是由代码生成工具自动生成的，如非必要，不要修改。
///    <<Description>>
/// Copyright© <DateTime.Now.Year> <Copyright>
/// History:
///     <DateTime.Now>    My.GenCode    Original Version
///////////////////////////////////////////////////////////////////////////
-->
<sqlMap namespace="<<EntitiesName>>"
        xmlns="http://ibatis.apache.org/mapping" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <alias>
        <typeAlias alias="<<EntityClassName>>" type="<<NameSpace>>.Domain.Entities.<<EntityClassName>>" />
    </alias>

    <resultMaps>
        <resultMap id="<<EntityClassName>>Map" class="<<EntityClassName>>">
            [loop<<ResultMapFiled>>]
            <result property="<<ClassFieldName>>" column="<<DbFieldName>>" />[/loop<<ResultMapFiled>>]
        </resultMap>    
    </resultMaps>

    <!-- =============================================
         MAPPED STATEMENTS 
         用parameterClass，QueryForList可以传递null参数
         用parameterMap，QueryForList不能提供null参数，否则出错。
         ============================================= -->
    <statements>
        <insert id="<<CreateMethodName>>" resultClass="System.Object" parameterClass="<<EntityClassName>>">
            Insert Into <<EntitiesName>>(
                <<PropertiesNames>>
            )
            Values(
                <<InsertValues>>
            )
            <selectKey resultClass="int" type="post" property="Id">
                select @@IDENTITY as value
            </selectKey>
        </insert>

        <update id="<<UpdateMethodName>>" resultClass="int" parameterClass="<<EntityClassName>>">
            Update <<EntitiesName>> Set
                <<UpdateNameValuePairs>>
            Where Id=#Id#
        </update>
        
        <!-- 此方式是直接拼接Sql字符串，存在被注入的安全隐患 -->
        <delete id="<<DeleteMethodName>>" resultClass="int" parameterClass="string">
            Delete From <<EntitiesName>> Where Id In($Ids$)
        </delete>

        <!-- 此语句传入的参数比较模糊(所以灵活，省略了很多Sql语句)，应该用文档清晰说明每个条件的作用 -->
        <select id="<<ReadDetailMethodName>>" resultClass="<<EntityClassName>>" parameterClass="<<EntityClassName>>">
            Select 
                <<PropertiesNames>>
            From Blogs
            Where Id=#Id#  
        </select>

        <!-- 自动生成的Sql时选择了全部的列，请裁减为合适的列数 -->
        <select id="<<ReadListMethodName>>" resultClass="<<EntityClassName>>" parameterClass="<<EntityClassName>>">
            Select 
                <<PropertiesNames>>
            From Blogs
            Order By Id Desc
        </select>
        
        <!-- 某查询条件下的记录总数 -->
        <select id="<<ReadCountMethodName>>" resultClass="int" parameterClass="<<EntityClassName>>">
            Select Count(*) From <<EntitiesName>>
        </select>
        <!--================================
            上面是自动生成的代码,下面是手工编写的代码
            ================================-->
     
    </statements>
</sqlMap>